package task3;

// 上网套餐类
public class NetPackage extends Package implements NetService{

    // 上网流量
    private double data;

    // 无参构造
    public NetPackage() {
    }

    // 有参构造
    public NetPackage(double price, double data) {
        super(price);
        this.data = data;
    }

    public double getData() {
        return data;
    }

    public void setData(double data) {
        this.data = data;
    }

    @Override
    public void show() {
        System.out.println("当前上网套餐信息为：");
        System.out.println("剩余上网流量：" + this.getData() + "GB  每月资费: " + super.getPrice() + "元");
    }

    // 实现上网服务接口
    @Override
    public void service(double data, PhoneCard phoneCard) {
        // 如果上网套餐内上网流量小于等于已经消费的上网流量+当前上网流量，则套餐用完
        if (phoneCard.getNetPackage().getData() <= data){
            System.out.println("套餐内上网套餐已用完！");
        }
        // 如果上网套餐内上网流量大于已经消费的上网流量+当前上网流量，则套餐还有剩余，可继续使用套餐内上网
        else {
            // 套餐内上网流量减少
            phoneCard.getNetPackage().setData(phoneCard.getNetPackage().getData() - data);
            // 当前电话卡上网流量增加
            phoneCard.setData(phoneCard.getData() + data);
        }
    }

    // 添加上网套餐，并消费套餐金额
    @Override
    public void addPackage(PhoneCard phoneCard,UserConsume userConsume){
        // 若当前电话卡无流量套餐
        if (phoneCard.getNetPackage() == null){
            if(phoneCard.getBalance() >= this.getPrice()){
                // 为当前电话卡用户绑定上网套餐
                phoneCard.setNetPackage(this);
                // 每月固定消费一次流量套餐金额
                userConsume.setFine(phoneCard.getNetPackage().getPrice());
                phoneCard.setUserConsume(userConsume);
                phoneCard.setBalance(phoneCard.getBalance() - phoneCard.getNetPackage().getPrice());
            }else {
                System.out.println("当前电话卡余额不足，不能办理该流量套餐！");
            }
        } else {
            System.out.println("当前电话卡已有流量套餐！");
        }
    }

    // 用户消费流量套餐
    @Override
    public void consume(PhoneCard phoneCard,UserConsume userConsume,double data){
        if (phoneCard.getNetPackage() != null){
            userConsume.setTime(data);
            phoneCard.setUserConsume(userConsume);
            phoneCard.getNetPackage().service(data,phoneCard);
        }
    }
}
